# RISC OS Quake2 makefile

#CFLAGS += -DDISABLE_PARTICLE_RENDERING
#CFLAGS += -DDISABLE_POLY_RENDERING

CPFLAGS=~cfr~v
CP=copy

# Norcroft stuff
#CC=cc
#CFLAGS+=-DGAME_HARD_LINKED -DREF_HARD_LINKED -DRISCOS_FPLIB

# -DGCCBROKENRELATIVEPATHS 
# GCC stuff
CFLAGS+=-DGAME_HARD_LINKED -DREF_HARD_LINKED -mpoke-function-name -O2 -DRISCOS_FPLIB -DDYNAMIC_CMODELMEM -DRISCOS -DPROF_ENABLED
# -msoft-float
# -mcpu=xscale

CC=gcc
LINK = gcc -o

GLLIBS = lib/libGL

# -DPROF_ENABLED
# -finstrument-functions

%.o : %.s
	$(CC) -c -o $@ $<

MKDIR=mkdir

AR=ar
ARFLAGS=

RESDIR=riscos.Resources

SERVEROBJS=server/sv_ccmds.o	\
           server/sv_ents.o	\
           server/sv_game.o	\
           server/sv_init.o	\
           server/sv_main.o	\
           server/sv_send.o	\
           server/sv_user.o	\
           server/sv_world.o

NULLSERVEROBJS=server/sv_null.o

CLIENTOBJS=client/cl_cin.o	\
           client/cl_ents.o	\
           client/cl_fx.o	\
           client/cl_input.o	\
           client/cl_inv.o	\
           client/cl_main.o	\
           client/cl_newfx.o	\
           client/cl_parse.o	\
           client/cl_pred.o	\
           client/cl_scrn.o	\
           client/cl_tent.o	\
           client/cl_view.o	\
           client/console.o	\
           client/keys.o	\
           client/menu.o	\
           client/qmenu.o	\
           client/snd_dma.o	\
           client/snd_mem.o	\
           client/snd_mix.o	\
           client/x86.o

GAMEOBJS=game/g_ai.o		\
         game/g_chase.o		\
         game/g_cmds.o		\
         game/g_combat.o	\
         game/g_func.o		\
         game/g_items.o		\
         game/g_main.o		\
         game/g_misc.o		\
         game/g_monster.o	\
         game/g_phys.o		\
         game/g_save.o		\
         game/g_spawn.o		\
         game/g_svcmds.o	\
         game/g_target.o	\
         game/g_trigger.o	\
         game/g_turret.o	\
         game/g_utils.o		\
         game/g_weapon.o	\
         game/m_actor.o		\
         game/m_berserk.o	\
         game/m_boss2.o		\
         game/m_boss3.o		\
         game/m_boss31.o	\
         game/m_boss32.o	\
         game/m_brain.o		\
         game/m_chick.o		\
         game/m_flash.o		\
         game/m_flipper.o	\
         game/m_float.o		\
         game/m_flyer.o		\
         game/m_gladiator.o	\
         game/m_gunner.o	\
         game/m_hover.o		\
         game/m_infantry.o	\
         game/m_insane.o	\
         game/m_medic.o		\
         game/m_move.o		\
         game/m_mutant.o	\
         game/m_parasite.o	\
         game/m_soldier.o	\
         game/m_supertank.o	\
         game/m_tank.o		\
         game/p_client.o	\
         game/p_hud.o		\
         game/p_trail.o		\
         game/p_view.o		\
         game/p_weapon.o	\
         game/q_shared.o

REFSOFTOBJS=ref_soft/r_aclip.o	\
            ref_soft/r_alias.o	\
            ref_soft/r_bsp.o	\
            ref_soft/r_draw.o	\
            ref_soft/r_edge.o	\
            ref_soft/r_image.o	\
            ref_soft/r_light.o	\
            ref_soft/r_main.o	\
            ref_soft/r_misc.o	\
            ref_soft/r_model.o	\
            ref_soft/r_part.o	\
            ref_soft/r_poly.o	\
            ref_soft/r_polyse.o	\
            ref_soft/r_rast.o	\
            ref_soft/r_scan.o	\
            ref_soft/r_sprite.o	\
            ref_soft/r_surf.o

REFGLOBJS=ref_gl/gl_draw.o  \
          ref_gl/gl_image.o \
          ref_gl/gl_light.o \
          ref_gl/gl_mesh.o  \
          ref_gl/gl_model.o \
          ref_gl/gl_rmain.o \
          ref_gl/gl_rmisc.o \
          ref_gl/gl_rsurf.o \
          ref_gl/gl_warp.o

QCOMMONOBJS=qcommon/cmd.o	\
            qcommon/cmodel.o	\
            qcommon/common.o	\
            qcommon/crc.o	\
            qcommon/cvar.o	\
            qcommon/files.o	\
            qcommon/md4.o	\
            qcommon/net_chan.o	\
            qcommon/pmove.o

RISCOSOBJS=riscos/net_udp.o	\
           riscos/sys.o		\
           riscos/vid.o		\
           riscos/glob.o	\
           riscos/swimp.o	\
           riscos/findnext.o	\
           riscos/consoleio.o	\
           riscos/hunk.o	\
           riscos/keyin.o	\
           riscos/setfpu.o	\
           riscos/cd.o		\
           riscos/snddma.o	\
           riscos/dynarea.o	\
           riscos/inmouse.o	\
           riscos/A_Float.o	\
           riscos/DRender.o	\
           riscos/romaths.o	\
           riscos/LogFloat.o    \
           riscos/reqfuncts.o

RISCOSGLOBJS =riscos/qgl.o         \
              riscos/glimp.o

CLTLIB     = q2client.o
SRVLIB     = q2server.o
GAMELIB    = q2game.o
REFSOFTLIB = q2refsoft.o
REFGLLIB = q2refgl.o
QCOMMONLIB = q2common.o
RISCOSLIB  = q2riscos.o

$(CLTLIB) : $(CLIENTOBJS)
#	$(AR) -c $@ $^
	$(AR) -c o.q2client client.o.cl_cin client.o.cl_ents client.o.cl_fx client.o.cl_input client.o.cl_inv client.o.cl_main client.o.cl_newfx client.o.cl_parse client.o.cl_pred client.o.cl_scrn client.o.cl_tent client.o.cl_view client.o.console client.o.keys client.o.menu client.o.qmenu client.o.snd_dma client.o.snd_mem client.o.snd_mix client.o.x86

$(SRVLIB) : $(SERVEROBJS)
#	$(AR) -c $@ $^
	$(AR) -c o.q2server server.o.sv_ccmds server.o.sv_ents server.o.sv_game server.o.sv_init server.o.sv_main server.o.sv_send server.o.sv_user server.o.sv_world

$(GAMELIB) : $(GAMEOBJS)
#	$(AR) -c $@ $^
	$(AR) -c o.q2game game.o.g_ai game.o.g_chase game.o.g_cmds game.o.g_combat game.o.g_func game.o.g_items game.o.g_main game.o.g_misc game.o.g_monster game.o.g_phys game.o.g_save game.o.g_spawn game.o.g_svcmds game.o.g_target game.o.g_trigger game.o.g_turret game.o.g_utils game.o.g_weapon game.o.m_actor game.o.m_berserk game.o.m_boss2 game.o.m_boss3 game.o.m_boss31 game.o.m_boss32 game.o.m_brain game.o.m_chick game.o.m_flash game.o.m_flipper game.o.m_float game.o.m_flyer game.o.m_gladiator game.o.m_gunner game.o.m_hover game.o.m_infantry game.o.m_insane game.o.m_medic game.o.m_move game.o.m_mutant game.o.m_parasite game.o.m_soldier game.o.m_supertank game.o.m_tank game.o.p_client game.o.p_hud game.o.p_trail game.o.p_view game.o.p_weapon game.o.q_shared

$(REFSOFTLIB) : $(REFSOFTOBJS)
#	$(AR) -c $@ $^
	$(AR) -c o.q2refsoft ref_soft.o.r_aclip ref_soft.o.r_alias ref_soft.o.r_bsp ref_soft.o.r_draw ref_soft.o.r_edge ref_soft.o.r_image ref_soft.o.r_light ref_soft.o.r_main ref_soft.o.r_misc ref_soft.o.r_model ref_soft.o.r_part ref_soft.o.r_poly ref_soft.o.r_polyse ref_soft.o.r_rast ref_soft.o.r_scan ref_soft.o.r_sprite ref_soft.o.r_surf

$(REFGLLIB) : $(REFGLOBJS)
#	$(AR) -c $@ $^
	$(AR) -c o.q2refgl ref_gl.o.gl_draw ref_gl.o.gl_image ref_gl.o.gl_light ref_gl.o.gl_mesh ref_gl.o.gl_model ref_gl.o.gl_rmain ref_gl.o.gl_rmisc ref_gl.o.gl_rsurf ref_gl.o.gl_warp

$(QCOMMONLIB) : $(QCOMMONOBJS)
#	$(AR) -c $@ $^
	$(AR) -c o.q2common qcommon.o.cmd qcommon.o.cmodel qcommon.o.common qcommon.o.crc qcommon.o.cvar qcommon.o.files qcommon.o.md4 qcommon.o.net_chan qcommon.o.pmove

#$(RISCOSLIB) : $(RISCOSOBJS)

!RunImage: $(CLTLIB) $(QCOMMONLIB) $(SRVLIB) $(GAMELIB) $(REFSOFTLIB) $(RISCOSOBJS)
	$(LINK) $@ $^

!RunImageGL: $(CLTLIB) $(QCOMMONLIB) $(SRVLIB) $(GAMELIB) $(REFGLLIB) $(RISCOSOBJS) $(RISCOSGLOBJS)
	$(LINK) $@ $^ ${GLLIBS}

!Quake2:
	$(MKDIR) !Quake2

install: !Quake2 !RunImage
	$(CP) !RunImage !Quake2.!RunImage $(CPFLAGS)
	$(CP) $(RESDIR).!Run !Quake2.!Run $(CPFLAGS)
	$(CP) $(RESDIR).!Boot !Quake2.!Boot $(CPFLAGS)
	$(CP) $(RESDIR).!Sprites !Quake2.!Sprites $(CPFLAGS)
	$(CP) $(RESDIR).!Sprites22 !Quake2.!Sprites22 $(CPFLAGS)
	$(CP) $(RESDIR).GameUtils !Quake2.GameUtils $(CPFLAGS)

clean: 
	wipe o.* ~C V
	wipe client.o.* ~C V
	wipe game.o.* ~C V
	wipe qcommon.o.* ~C V
	wipe ref_gl.o.* ~C V
	wipe ref_soft.o.* ~C V
	wipe riscos.* ~C V
	wipe server.o.* ~C V

installgl: !GLQuake2 !RunImage
	$(CP) !RunImageGL !GLQuake2.!RunImage $(CPFLAGS)
	$(CP) $(RESDIR).!Run !GLQuake2.!Run $(CPFLAGS)
	$(CP) $(RESDIR).!Boot !GLQuake2.!Boot $(CPFLAGS)
	$(CP) $(RESDIR).!Sprites !GLQuake2.!Sprites $(CPFLAGS)
	$(CP) $(RESDIR).!Sprites22 !GLQuake2.!Sprites22 $(CPFLAGS)
	$(CP) $(RESDIR).GameUtils !GLQuake2.GameUtils $(CPFLAGS)

